<?
/* Se asegura que el archivo es incluido por el index */
	defined( 'LOAD_MODULE_ACTION' ) or die( 'No esta permitido el acceso directo a ' . __FILE__ );
	/* Cuando se hace el include del archivo automaticamente crea un objeto y lo guarda en una variable temporal */
		$this->oTmpObject = new Tarea_exe( $this );

	class Tarea_exe extends Exe
	{
	function Tarea_exe( &$oModule )
		{
			$this->Exe( $oModule );
		}
	function updateStar()
		{
			$ncTarea = getParam( 'ncTarea' );
			$bEstrella = getParam( 'bEstrella' );
			if ( $ncTarea )
			{
				$this->oDatabase->update( "atTarea", "bEstrella", $bEstrella, "WHERE", "ncTarea", $ncTarea );
			}
		}
	function updateTag()
		{
			$ncTarea = getParam( 'ncTarea' );
			$ncRotulo = getParam( 'ncRotulo' );
			$cNewItem = getParam( 'newItem' );
			if ( $cNewItem )
			{
				$ncRotulo = $this->oDatabase->nextKey( "atRotuloTarea", "ncRotulo" );
				$bOk = $this->oDatabase->insert( "atRotuloTarea", "ncGrupo", obtenerMiGrupo(),
										"ncRotulo", $ncRotulo, "cdRotulo", $cNewItem );
			}
			if ( $ncTarea && $ncRotulo )
			{
				$bOk = $this->oDatabase->insert( "atTareaRotulo",
										"ncRotulo", $ncRotulo, "ncTarea", $ncTarea );
			}
		}
	// MODIFICAR_UNA_TAREA
	function update()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Tarea_frm' );
			extract( $oForm->getFieldArray() );
			// Modifica el Registro de Tarea
				$this->oDatabase->update("atTarea",
								"ncVisibilidad", $ncVisibilidad,
								"ncGrupo", obtenerMiGrupo(),
								"cdTarea", $cdTarea,
								"ncDomicilio", $ncDomicilio,
								"cDescripcion", $cDescripcion,
								"dVencimiento", $dVencimiento,
								"dDesde", $dDesde,
								"dHasta", $dHasta,
								"ncPrioridad", $ncPrioridad,
								"ncTareaPadre", $ncTareaPadre,
								"nqTiempo", $nqTiempo,
								"fiCosto", $fiCosto,
								"ncProyecto", $ncProyecto,
								"ncCategoriaTarea", $ncCategoriaTarea,
								"ncUsuario", $this->oModule->oUserSession->getUser(),
								"WHERE",
								"ncTarea", $ncTarea );
				echo $this->oDatabase->cSql;
			// Si es una subtarea => actualiza los datos de sus padre
				$ncTareaActual= $ncTareaPadre;
				while ( $ncTareaActual )
				{
					list( $fiCostoSubTareas, $nqTiempoSubTareas )= $this->oDatabase->getArray("SELECT SUM(fiCosto) , SUM(nqTiempo) FROM atTarea WHERE ncTareaPadre = $ncTareaActual"  ) ;
					$this->oDatabase->update("atTarea", "fiCosto", $fiCostoSubTareas, "nqTiempo", $nqTiempoSubTareas,
											"WHERE",
											"ncTarea", $ncTareaActual );
					$ncTareaActual = $this->oDatabase->getData("SELECT ncTareaPadre FROM atTarea WHERE ncTarea = $ncTareaActual"  ) ;
				}
			// Actualiza los responsables
				$this->oDatabase->delete("atTareaResponsable","ncTarea", $ncTarea );
				$aPersonas = $oForm->aFields['aPersona']->getValue();
				if ( !is_array($aPersonas) ) $aPersonas  =  explode ( ",", $aPersona);
				foreach ( $aPersonas as $ncPersona)
				{
					if ( $ncPersona )
					{
						$this->oDatabase->insert("atTareaResponsable"
											,"ncTarea", $ncTarea
											,"ncPersona", $ncPersona);
					}
				}
		// Redirecciona la siguiente accion
			$oForm->reset();
		}
	// AGREGAR_UNA_TAREA
	function insert()
		{
			// Convierte a variables los datos del Formulario asociado a la accion
			$oForm = $this->oModule->loadClass( 'Tarea_frm' );
			extract( $oForm->getFieldArray() );
			// Agrega la Tarea
				$ncTarea = $this->oDatabase->nextKey("atTarea", "ncTarea");
				$this->oDatabase->insert("atTarea",
								"ncVisibilidad", $ncVisibilidad,
								"ncGrupo", obtenerMiGrupo(),
								"cdTarea", $cdTarea,
								"ncDomicilio", $ncDomicilio,
								"cDescripcion", $cDescripcion,
								"ncPrioridad", $ncPrioridad,
								"ncCategoriaTarea", $ncCategoriaTarea,
								"ncTareaPadre", $ncTareaPadre,
								"nqTiempo", $nqTiempo,
								"fiCosto", $fiCosto,
								"dVencimiento", $dVencimiento,
								"ncProyecto", $ncProyecto,
								"dDesde", $dDesde,
								"dHasta", $dHasta,
								"ncUsuario", $this->oModule->oUserSession->getUser(),
								"ncTarea", $ncTarea );
			// Si es una subtarea => actualiza los datos de sus padre
				$ncTareaActual= $ncTareaPadre;
				while ( $ncTareaActual )
				{
					list( $fiCostoSubTareas, $nqTiempoSubTareas )= $this->oDatabase->getArray("SELECT SUM(fiCosto) , SUM(nqTiempo) FROM atTarea WHERE ncTareaPadre = $ncTareaActual"  ) ;
					$this->oDatabase->update("atTarea", "fiCosto", $fiCostoSubTareas, "nqTiempo", $nqTiempoSubTareas,
											"WHERE",
											"ncTarea", $ncTareaActual );
					$ncTareaActual = $this->oDatabase->getData("SELECT ncTareaPadre FROM atTarea WHERE ncTarea = $ncTareaActual"  ) ;
				}
			// Agrega los responsables
				$aPersonas  =  explode ( ",", $aPersona);
				foreach ( $aPersonas as $ncPersona)
				{
					if ( $ncPersona )
					{
						$this->oDatabase->insert("atTareaResponsable"
										,"ncTarea", $ncTarea
										,"ncPersona", $ncPersona);
					}
				}
		}
	// REALIZAR_TAREA
	function finish()
		{
			$oncTarea = new InputNumber( '', 'ncTarea' );
			$aTareas	= $oncTarea->getValue();
			foreach ( $aTareas as $ncTarea )
			{
				$this->oDatabase->update( "atTarea", "dCompleto", DATE("Y-m-d"), "WHERE", "ncTarea", $ncTarea);
			}
		}
	function startTask()
		{
			$oncTarea = new InputNumber( '', 'ncTarea' );
			$aTareas	= $oncTarea->getValue();
			foreach ( $aTareas as $ncTarea )
			{
				$this->oDatabase->update( "atTarea", "dInicio", DATE("Y-m-d"), "WHERE", "ncTarea", $ncTarea);
			}
		}
	function endTask()
		{
			$oncTarea = new InputNumber( '', 'ncTarea' );
			$aTareas	= $oncTarea->getValue();
			foreach ( $aTareas as $ncTarea )
			{
				$this->oDatabase->update( "atTarea", "dCompleto", DATE("Y-m-d"), "WHERE", "ncTarea", $ncTarea);
			}
		}
	function undoFinish()
		{
			$ncTarea = getParam( 'ncTarea' );
			if ( $ncTarea )
			{
				$this->oDatabase->update( "atTarea", "dCompleto", '', "WHERE", "ncTarea", $ncTarea);
			}
		}
	// ELIMINAR_UNA_TAREA
	function delete()
		{
			$oncTarea = new InputNumber( '', 'ncTarea' );
			$aTareas	= $oncTarea->getValue();
			$ncMiGrupo = obtenerMiGrupo();
			if ( is_array($aTareas) )
			{
				foreach ( $aTareas as $ncTarea )
				{
					$aRow = $this->oDatabase->getArray("SELECT ncVisibilidad, ncGrupo FROM atTarea WHERE ncTarea=" . $ncTarea);
					$bPermisoEscritura = ($aRow['ncVisibilidad'] == VISIBILIDAD_PUBLICO || $aRow['ncGrupo'] == $ncMiGrupo);
					if ( $bPermisoEscritura  ) $this->oDatabase->delete( "atTarea", "ncTarea", $ncTarea);
				}
			} else
			{
				$aRow = $this->oDatabase->getArray("SELECT ncVisibilidad, ncGrupo FROM atTarea WHERE ncTarea=" . $aTareas);
				$bPermisoEscritura = ($aRow['ncVisibilidad'] == VISIBILIDAD_PUBLICO || $aRow['ncGrupo'] == $ncMiGrupo);
				if ( $bPermisoEscritura  )  $this->oDatabase->delete( "atTarea", "ncTarea", $aTareas);
			}
		}
	}
?>
